package ywpt.service.config;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.directwebremoting.annotations.RemoteMethod;
import org.directwebremoting.annotations.RemoteProxy;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Service;

import ywpt.core.dao.HibernateEntityDao;
import ywpt.model.CommonTable;
import ywpt.model.UnitInfo;
import ywpt.model.WeixinAccount;
import ywpt.web.common.PublicFunction;
@Service("weixinAccountService")
@RemoteProxy(name="weixinAccountService")
public class WeixinAccountServiceImpl extends HibernateEntityDao<WeixinAccount> implements WeixinAccountService {

	/* （非 Javadoc）
	 * @see ywpt.service.config.WeixinAccountService#getProjectInfoCountByProjeceName(java.lang.String, java.lang.Long)
	 */
	public int getProjectInfoCountByName(String name, Long unit_id) {
		// TODO 自动生成方法存根
		DetachedCriteria query = DetachedCriteria.forClass(WeixinAccount.class);
		query.createAlias("unitInfo", "unitInfo").add(Restrictions.eq("unitInfo.id", unit_id));
		if ( name != null && !name.trim().equals("") )
		{
			query.add(Restrictions.or(Restrictions.like("name", "%" + name + "%" ),  
							          Restrictions.like("name", "%" + name + "%" )));
		}
		query.setProjection(null);
		return this.getCountByCriteria(query);
		
	}

	/* （非 Javadoc）
	 * @see ywpt.service.config.WeixinAccountService#gettWeixinAccountCountByCriteria(org.hibernate.criterion.DetachedCriteria)
	 */
	public int getWeixinAccountCountByCriteria(DetachedCriteria query) {
		// TODO 自动生成方法存根
		return this.getCountByCriteria(query);
	}

	/* （非 Javadoc）
	 * @see ywpt.service.config.WeixinAccountService#getWeixinAccountById(java.lang.Long)
	 */
	public WeixinAccount getWeixinAccountById(Long id) {
		// TODO 自动生成方法存根
		return this.get(id);
	}

	/* （非 Javadoc）
	 * @see ywpt.service.config.WeixinAccountService#getWeixinAccountByName(java.lang.String, java.lang.Long, int, int)
	 */
	@RemoteMethod
	public List<WeixinAccount> getWeixinAccountByName(String name, Long unit_id, int start, int size) {
		// TODO 自动生成方法存根
		DetachedCriteria query = DetachedCriteria.forClass(WeixinAccount.class);
		query.createAlias("unitInfo", "unitInfo").add(Restrictions.eq("unitInfo.id", unit_id));
		if ( name != null && !name.trim().equals("") )
		{
			query.add(Restrictions.or(Restrictions.like("name", "%" + name + "%"),  
							          Restrictions.like("name", "%" + name + "%")));
			
		}
		query.add(Restrictions.eq("delete_flag", false));
		query.addOrder(Order.asc("id"));
		List<WeixinAccount> weixinAccountList = new ArrayList<WeixinAccount>();
		List<WeixinAccount> weixinAccountLists = new ArrayList<WeixinAccount>();
		WeixinAccount weixinAccount =new WeixinAccount();
		
		weixinAccountList.addAll(this.findAllByCriteria(query, size, start));
		int i = 1;
		for ( Iterator<WeixinAccount> itr = weixinAccountList.iterator(); itr.hasNext(); i++ ) 
		{
			weixinAccount = itr.next();
			String ss = PublicFunction.format(weixinAccount.getName() + "",5, "  ", 1); 
			
			weixinAccount.setName(ss);
			weixinAccountLists.add(weixinAccount);
		}
		System.out.println("weixinAccountLists.size()="+ weixinAccountLists.size() );
		return weixinAccountLists;
		
	}

	/* （非 Javadoc）
	 * @see ywpt.service.config.WeixinAccountService#getWeixinAccountInfos(org.hibernate.criterion.DetachedCriteria, int, int)
	 */
	public List<WeixinAccount> getWeixinAccountInfos(DetachedCriteria query, int pageSize, int startIndex) {
		// TODO 自动生成方法存根
		return this.findAllByCriteria(query, pageSize, startIndex);
	}
	public List<WeixinAccount> getWeixinAccountInfos() {
		// TODO 自动生成方法存根
		return this.getAll();
	}
	/* （非 Javadoc）
	 * @see ywpt.service.config.WeixinAccountService#removeWeixinAccountInfo(java.lang.Long)
	 */
	public void removeWeixinAccountInfo(Long id) {
		// TODO 自动生成方法存根
		WeixinAccount weixinAccount = this.get(id);
		weixinAccount.setDelete_flag(false);
		this.update(weixinAccount);
	}

	/* （非 Javadoc）
	 * @see ywpt.service.config.WeixinAccountService#saveWeixinAccountInfo(ywpt.model.WeixinAccount, java.lang.Long, java.lang.Long, java.lang.Long)
	 */
	public void saveWeixinAccountInfo(WeixinAccount weixinAccount, Long weixin_type, Long is_Certified, Long unit_id) {
		// TODO 自动生成方法存根
		if(weixin_type!=null)
			weixinAccount.setWeixin_type(this.get(CommonTable.class, weixin_type));
		if(is_Certified!=null)
			weixinAccount.setIs_Certified(this.get(CommonTable.class, is_Certified));

		if(unit_id!=null)
			weixinAccount.setUnitInfo(this.get(UnitInfo.class, unit_id));
		
		super.save(weixinAccount);
	}

	/* （非 Javadoc）
	 * @see ywpt.service.config.WeixinAccountService#updateWeixinAccountInfo(ywpt.model.WeixinAccount, java.lang.Long, java.lang.Long, java.lang.Long)
	 */
	public void updateWeixinAccountInfo(WeixinAccount weixinAccount, Long weixin_type, Long is_Certified, Long unit_id) {
		// TODO 自动生成方法存根
		if(weixin_type!=null)
			weixinAccount.setWeixin_type(this.get(CommonTable.class, weixin_type));
		if(is_Certified!=null)
			weixinAccount.setIs_Certified(this.get(CommonTable.class, is_Certified));

		if(unit_id!=null)
			weixinAccount.setUnitInfo(this.get(UnitInfo.class, unit_id));
		
		super.update(weixinAccount);		
	}
	@RemoteMethod
	public int getWeixinAccountCountByName(String name, Long unit_id) {
		// TODO 自动生成方法存根
		DetachedCriteria query = DetachedCriteria.forClass(WeixinAccount.class);
		query.createAlias("unitInfo", "unitInfo").add(Restrictions.eq("unitInfo.id", unit_id));
		if ( name != null && !name.trim().equals("") )
		{
			query.add(Restrictions.like("name", "%" + name + "%" ));
		}
		query.add(Restrictions.eq("delete_flag", false));
		query.setProjection(null);
		System.out.println("getWeixinAccountCountByName ="+getCountByCriteria(query) );
		return this.getCountByCriteria(query);
	}

	public void saveWeixinAccountInfo(WeixinAccount weixinAccount) {
		// TODO 自动生成方法存根
		super.save(weixinAccount);
	}
	
}
